<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>变量</title>
    <script>
      /*
        定义变量
        ECMA5(ES5)        var 变量名 = 变量值

        ECMA678(ES678)    let 变量名 = 变量值
                          const 变量名 = 变量值

        变量名的命名规则:
        1. 必须是以字母,数字,_,$或者中文组成,但是不推荐使用中文(乱码)
        2. 不能是以数字开头
        3. 不能是js的关键字和保留字
           https://www.runoob.com/js/js-reserved.html
        4. 变量名推荐采用驼峰命名方式,即要求首字母小写,后面每个单词首字母大写 studentName, employeeName, shoppingCartOrderNo...
        5. 变量名必须见名知意,实际开发中推荐组合写法,例如名字不要单独使用name,而应该使用 studentName, employeeName...
       */
      //1.先声明变量,然后赋值
      let name
      name = '张三'
      console.log(name)

      //2.声明变量的同时直接赋值(也叫作初始化)
      // let声明的变量在同一个作用域中不能重复定义!
      let name2 = '张三'
      //改变变量的值
      name2 = '李四'
      console.log(name2)
      name2 = '王五'
      console.log(name2)

      //补充: const修饰的变量是常量,无法修改
      /* const pi = 3.14
      pi = pi + 1
      console.log(pi) */

      //其他细节
      //1.声明变量后没有赋值,直接使用,则得到undefined,它也属于是一种值
      let age
      console.log(age) // undefined

      console.log('这是最后一句话1...')

      //2.没有声明变量直接使用,报错
      //注意: 如果JS出现这种红色错误,则代码会终止在这个位置,不继续向下运行了!!!
      //console.log(sex) // Uncaught ReferenceError: sex is not defined
      console.log('这是最后一句话2...')

      //特殊的变量赋值方式
      //1.
      /* let a = 3
      let b = 4
      let c = 5 */
      let a = 3,
        b = 4,
        c = 5
      console.log(a, b, c)

      //2.
      /* let x = 3
      let y = 3
      let z = 3 */
      let x, y, z
      x = y = z = 3
      console.log(x, y, z)
    </script>
  </head>
  <body></body>
</html>
